// 导入八爪鱼前端各组件引擎
import {oTemplateEngine} from './engine/template'
import {oTipsEngine} from "./engine/tips";
import {oConfirmEngine} from "./engine/confirm";
import {oRequestEngine} from "./engine/request";
import {oMethodsEngine} from "./engine/methods";
import {oToolsEngine} from "./engine/tools";
import {oLoadEngine} from "./engine/load";
import {oRouterEngine} from "./engine/router";
import {oRenderEngine} from "./engine/render";
import {oControlEngine} from "./engine/control"
import {oPushEngine} from "./engine/push"
import {oAppletEngine} from "./engine/applet";

import {utils} from "./engine/utils";
Vue.prototype.$utils = utils;

import VConosle from "vconsole";

// 此为八爪鱼前端框架，配套后台八爪鱼API框架可实现高度自动化开发环境。
function oEngine(vue) {
  this.vue = vue;
  this.config = {};// 配置数据

  //护照数据，贯穿全站，在oRequestEngine的init方法中会从Localstorage中获取。
  this.passport = {
    id: -1,
    typeID: 1,// 1:管理端（教师端）；2:用户端（家长端）
    name: "",
    realName: "",
    password: "",
    encryption: false,
    appKey: "",// 获取appKey，全站申明周期使用的唯一key
    token: "",// 令牌，判断当前用户是否有资格请求资源。
    // 页面权限可以做在菜单里面，对于vue而言，如果没有权限，则路由都不会生成，所以对于前端而言根本不存在这个页面，故也不存在盗取资源
    // 接口和数据权限，可以通过url绑定接口地址或八爪鱼Source ID的方式来实现，在创建菜单url的时候复选用到的接口地址或八爪鱼Source ID
    // 针对自定义接口，可以自定义数据权限，针对八爪鱼，有配套的八爪鱼数据权限（规定八爪鱼传入的参数的范围即可）这样即可实现接口级别的权限验证。
    remember: false,
    // 样式默认default
    theme: [{
      name: "default",
      offset: {menu: 90, content: 135, list: 200},
      use: true
    }, {
      name: "herodoo",
      offset: {menu: 100, content: 150, list: 200},
      use: false
    }],
    // 权限数据
    authorization: {
      data: "",     // "51_1","2_1","131_1"
      company: null,// 2
      project: "",  // 1,2,3
      building: "", // 1,2,3
    },
    language: "CN",        // 默认值，如果客户机cookie有值则使用客户机配置、登陆以后更新为登陆帐户的主题。
    system: null, // 当前打开的系统，在 Head 控件中赋予。
    project: null, // 当前操作的项目，在 oSecurityEngine 组件中赋予，如果有值则不会覆盖。
    building: null, // 当前操作的建筑，在 oSecurityEngine 组件中赋予，如果有值则不会覆盖。
    menu: [],//记录菜单打开关闭状态。
    tab: [{id: -1, url: "/main/platform/dashboard", name: ""}],//记录tab页打开状态，下次登录还是打开上次的页面。
    tabCurrentName: "M_0",
    lock: false, // 是否锁屏
    bangs: false, // 是否刘海屏
  };

  // 加载各种引擎
  this.note = "VUE APP Framework";
  // 执行路由引擎注册
  this.router = new oRouterEngine(this);
  // 执行请求渲染引擎，因为从后面开始都需要用到请求，唯一不足的是create生命周期内只有tips以后的引擎才能使用tips。
  this.tools = new oToolsEngine(this);
  // 执行第三方插件引入
  this.load = new oLoadEngine(this);
  // 执行小程序组件
  this.applet = new oAppletEngine(this);
  // 执行短信、APP推送
  this.push = new oPushEngine(this);
  // 执行数据请求模块（最核心）
  this.request = new oRequestEngine(this);
  // 执行提示渲染引擎
  this.tips = new oTipsEngine(this);
  this.confirm = new oConfirmEngine(this);
  // 执行方法事件引擎
  this.methods = new oMethodsEngine(this);
  // 初始化组件渲染引擎
  this.control = new oControlEngine(this);
  // 初始化模版渲染引擎
  this.template = new oTemplateEngine(this);
  // 初始化渲染引擎，渲染模板、组件、控件
  this.render = new oRenderEngine(this);

  // 初始化渲染引擎，渲染上述数据
  this.init();
}

oEngine.prototype = {
  init: function () {
    // 初始化路由
    this.router.init();
    // this.tips.debug("[Octopus] Engine Start, Page: " + this.router.get().path);
    this.tips.debug("Octopus Engine Start, Page: " + this.router.get().path + ".");
    // 测试环境会开启 vConsole
    if (this.config.model == "debug1") {
      let vConsole = new VConosle();
    }
  }
}

// VUE外挂JS库注册，很关键
export {
  oEngine
}
